home *** CD-ROM | disk | FTP | other *** search
- {******************************************************************************}
- { }
- { TGmMultipageImage 2.3 }
- { }
- { Copyright (c) 2001 Graham Murt - www.MurtSoft.com }
- { }
- { Feel free to e-mail me with any comments, suggestions, bugs or help at: }
- { }
- { graham@murtsoft.com }
- { }
- {******************************************************************************}
-
- unit GmMultipageImage;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, GmConst,
- GmPreview, Buttons, GmTypes;
-
- type
- TGmMultiPrintPage = class(TGmCustomPage)
- private
- FOrientation: TGmOrientation;
- FPagesPerSheet: TGmPagesPerSheet;
- FShowHeaderFooter: Boolean;
- procedure SetPagesPerSheet(APagesPerSheet: TGmPagesPerSheet);
- procedure DrawHeaderFooter(Canvas: TCanvas; AArea: TRect; Border: integer);
- protected
- procedure Paint; override;
- public
- constructor Create(AOwner: TComponent); override;
- property PagesPerSheet: TGmPagesPerSheet read FPagesPerSheet write SetPagesPerSheet default gmFourPage;
- end;
-
-
- TGmMultipageImage = class(TWinControl)
- private
- FBtnOnePage : TSpeedButton;
- FBtnTwoPage : TSpeedButton;
- FBtnFourPage: TSpeedButton;
- FPagesPerSheet: TGmPagesPerSheet;
- FPreview: TGmPreview;
- FPageImage: TGmMultiPrintPage;
- FShowButtons: Boolean;
- FShowHeaderFooter: Boolean;
- // events...
- FOnClickOnePage : TNotifyEvent;
- FOnClickTwoPage : TNotifyEvent;
- FOnClickFourPage: TNotifyEvent;
- procedure BtnClick(Sender: TObject);
- procedure SetGmPreview(APreview: TGmPreview);
- procedure SetPagesPerSheet(APagesPerSheet: TGmPagesPerSheet);
- procedure SetShadow(AShadow: TGmShadow);
- procedure SetShowButtons(AValue: Boolean);
- procedure SetShowHeaderFooter(AValue: Boolean);
- function GetShadow: TGmShadow;
-
- { Private declarations }
- protected
- procedure Notification(AComponent: TComponent; Operation: TOperation); override;
- // update messages...
- procedure MultiPageChanged(var Message: TMessage); message GM_MULTIPAGE_CHANGED;
- procedure OrientationChanged(var Message: TMessage); message GM_ORIENTATION_CHANGED;
- procedure ComponentResize(var Message: TMessage); message WM_SIZE;
- { Protected declarations }
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- { Public declarations }
- published
- property PagesPerSheet: TGmPagesPerSheet read FPagesPerSheet write SetPagesPerSheet default gmOnePage;
- property Preview: TGmPreview read FPreview write SetGmPreview;
- property ShowHint;
- property Shadow: TGmShadow read GetShadow write SetShadow;
- property ShowButtons: Boolean read FShowButtons write SetShowButtons default True;
- property ShowHeaderFooter: Boolean read FShowHeaderFooter write SetShowHeaderFooter default True;
- property Visible;
- property Color;
- // enents...
- property OnClickOnePage: TNotifyEvent read FOnClickOnePage write FOnClickOnePage;
- property OnClickTwoPage: TNotifyEvent read FOnClickTwoPage write FOnClickTwoPage;
- property OnClickFourPage: TNotifyEvent read FOnClickFourPage write FOnClickFourPage;
- { Published declarations }
- end;
-
- //procedure Register;
-
- implementation
-
- {$R MultiRes.RES}
-
- //------------------------------------------------------------------------------
-
- constructor TGmMultiPrintPage.Create(AOwner: TComponent);
- begin
- inherited;
- FPagesPerSheet := gmFourPage;
- end;
-
- procedure TGmMultiPrintPage.SetPagesPerSheet(APagesPerSheet: TGmPagesPerSheet);
- var
- AHeight: integer;
- AWidth: integer;
- begin
- begin
- if FOrientation = gmPortrait then
- begin
- AHeight := 60;
- AWidth := 45;
- end
- else
- begin
- AHeight := 45;
- AWidth := 60;
- end;
- FPagesPerSheet := APagesPerSheet;
- // resize page...
- if FPagesPerSheet = gmTwoPage then
- begin
- Height := AWidth;
- Width := AHeight;
- end
- else
- begin
- Height := AHeight;
- Width := AWidth;
- end;
- Top := (TWinControl(Owner).Height - Height) div 2;
- Invalidate;
- end;
- end;
-
- procedure TGmMultiPrintPage.DrawHeaderFooter(Canvas: TCanvas; AArea: TRect; Border: integer);
- begin
- if FShowHeaderFooter then
- begin
- Canvas.Pen.Color := $00777777;
- Canvas.Polyline([Point(AArea.Left+Border, AArea.Top+Border) , Point(AArea.Right-Border, AArea.Top+Border)]);
- Canvas.Polyline([Point(AArea.Left+Border, AArea.Bottom-Border), Point(AArea.Right-Border, AArea.Bottom-Border)]);
- end;
- end;
-
- procedure TGmMultiPrintPage.Paint;
- var
- PageArea: TRect;
- CurrentRect: TRect;
- begin
- inherited;
-
- Canvas.Pen.Style := psSolid;
- if FPagesPerSheet = gmOnePage then
- begin
- PageArea := Rect(0,0,((Width-Shadow.Width)), ((Height-Shadow.Width)-2));
- DrawHeaderFooter(Canvas, PageArea, 6);
- end
- else
- if FPagesPerSheet = gmTwoPage then
- begin
- PageArea := Rect(0,0,((Width-Shadow.Width)), ((Height-Shadow.Width)-2));
- if FOrientation = gmPortrait then
- CurrentRect := Rect(PageArea.Left, PageArea.Top, PageArea.Right div 2, PageArea.Bottom)
- else
- CurrentRect := Rect(PageArea.Left, PageArea.Top, PageArea.Right, PageArea.Bottom div 2);
- DrawHeaderFooter(Canvas, CurrentRect, 5);
-
- if FOrientation = gmPortrait then
- CurrentRect := Rect(PageArea.Right div 2, PageArea.Top, PageArea.Right, PageArea.Bottom)
- else
- CurrentRect := Rect(PageArea.Left, PageArea.Bottom div 2, PageArea.Right, PageArea.Bottom);
- DrawHeaderFooter(Canvas, CurrentRect, 5);
-
- Canvas.Pen.Color := clSilver;
- if FOrientation = gmPortrait then
- Canvas.PolyLine([Point(PageArea.Right div 2 , 1), Point(PageArea.Right div 2 , PageArea.Bottom)])
- else
- Canvas.PolyLine([Point(1 , PageArea.Bottom div 2), Point(PageArea.Right, PageArea.Bottom div 2)])
- end
- else
- if FPagesPerSheet = gmFourPage then
- begin
- PageArea := Rect(0,0,((Width-Shadow.Width)), ((Height-Shadow.Width)-2));
- CurrentRect := Rect(PageArea.Left, PageArea.Top, PageArea.Right div 2, PageArea.Bottom div 2);
- DrawHeaderFooter(Canvas, CurrentRect, 4);
- CurrentRect := Rect(PageArea.Right div 2, PageArea.Top, PageArea.Right, PageArea.Bottom div 2);
- DrawHeaderFooter(Canvas, CurrentRect, 4);
- CurrentRect := Rect(PageArea.Left, PageArea.Bottom div 2, PageArea.Right div 2, PageArea.Bottom);
- DrawHeaderFooter(Canvas, CurrentRect, 4);
- CurrentRect := Rect(PageArea.Right div 2, PageArea.Bottom div 2, PageArea.Right, PageArea.Bottom);
- DrawHeaderFooter(Canvas, CurrentRect, 4);
- Canvas.Pen.Color := clSilver;
- Canvas.PolyLine([Point(PageArea.Right div 2 , 1), Point(PageArea.Right div 2 , PageArea.Bottom)]);
- Canvas.PolyLine([Point(1 , PageArea.Bottom div 2), Point(PageArea.Right , PageArea.Bottom div 2)]);
- end;
- end;
-
- //------------------------------------------------------------------------------
-
-
- constructor TGmMultipageImage.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- Width := 105;
- Height := 81;
- FPageImage := TGmMultiPrintPage.Create(Self);
- FPageImage.FShowHeaderFooter := True;
-
- FShowHeaderFooter := True;
- with FPageImage do
- begin
- Left := 40;
- Width := 45;
- Height := 60;
- Shadow.Width := 2;
- Parent := Self;
- end;
- FShowButtons := False;
- PagesPerSheet := gmOnePage;
- SetShowButtons(True);
- end;
-
- destructor TGmMultipageImage.Destroy;
- begin
- //if Assigned(FPreview) then SendMessage(FPreview.Handle, GM_UNREGISTER_COMPONENT, Handle, 0);
- if Assigned(FBtnOnePage) then FBtnOnePage.Free;
- if Assigned(FBtnTwoPage) then FBtnTwoPage.Free;
- if Assigned(FBtnFourPage) then FBtnFourPage.Free;
- FPageImage.Free;
- inherited Destroy;
- end;
-
- procedure TGmMultipageImage.Notification(AComponent: TComponent; Operation: TOperation);
- begin
- inherited Notification(AComponent, Operation);
- if (Operation = opRemove) and (AComponent = FPreview) then
- FPreview := nil;
- //if (Operation = opRemove) and (AComponent = FPreview) then
- end;
-
- procedure TGmMultipageImage.MultiPageChanged(var Message: TMessage);
- begin
- if PagesPerSheet <> FPreview.PagesPerSheet then
- PagesPerSheet := FPreview.PagesPerSheet;
- end;
-
- procedure TGmMultiPageImage.OrientationChanged(var Message: TMessage);
- begin
- SetPagesPerSheet(FPagesPerSheet);
- end;
-
- procedure TGmMultiPageImage.ComponentResize(var Message: TMessage);
- begin
- Width := 105;
- Height := 81;
- end;
-
- procedure TGmMultipageImage.BtnClick(Sender: TObject);
- begin
- if (Sender = FBtnOnePage) and (PagesPerSheet <> gmOnePage) then
- begin
- PagesPerSheet := gmOnePage;
- if Assigned(FOnClickOnePage) then FOnClickOnePage(Self);
- end
- else
- if (Sender = FBtnTwoPage) and (PagesPerSheet <> gmTwoPage) then
- begin
- PagesPerSheet := gmTwoPage;
- if Assigned(FOnClickTwoPage) then FOnClickTwoPage(Self);
- end
- else
- if (Sender = FBtnFourPage) and (PagesPerSheet <> gmFourPage) then
- begin
- PagesPerSheet := gmFourPage;
- if Assigned(FOnClickFourPage) then FOnClickFourPage(Self);
- end;
- end;
-
- procedure TGmMultiPageImage.SetGmPreview(APreview: TGmPreview);
- begin
- if Assigned(APreview) then
- begin
- FPreview := APreview;
- if Assigned(FPreview) then FPreview.AddAssociatedComponent(Self);
- //SendMessage(FPreview.Handle, GM_REGISTER_COMPONENT, Handle, 0);
- PagesPerSheet := FPreview.PagesPerSheet;
- end
- else
- FPreview := nil;
- end;
-
- procedure TGmMultipageImage.SetPagesPerSheet(APagesPerSheet: TGmPagesPerSheet);
- begin
- FPagesPerSheet := APagesPerSheet;
- if Assigned(FPreview) then FPageImage.FOrientation := FPreview.Orientation;
- FPageImage.PagesPerSheet := APagesPerSheet;
- // select the correct button...
- if FShowButtons then
- begin
- FBtnOnePage.Down := APagesPerSheet = gmOnePage;
- FBtnTwoPage.Down := APagesPerSheet = gmTwoPage;
- FBtnFourPage.Down := APagesPerSheet = gmFourPage;
- end;
- if Assigned(FPreview) then FPreview.PagesPerSheet := APagesPerSheet;
- Invalidate;
- end;
-
- procedure TGmMultipageImage.SetShadow(AShadow: TGmShadow);
- begin
- FPageImage.Shadow := AShadow;
- FPageImage.Invalidate;
- end;
-
- procedure TGmMultipageImage.SetShowButtons(AValue: Boolean);
- begin
- if FShowButtons <> AValue then
- begin
- if AValue = True then
- begin
- FPageImage.Left := 40;
- FBtnOnePage := TSpeedButton.Create(Self);
- with FBtnOnePage do
- begin
- Top := 4;
- Left := 8;
- Glyph.LoadFromResourceName(HInstance, 'ONE');
- GroupIndex := 1;
- Down := True;
- OnClick := BtnClick;
- end;
- FBtnTwoPage := TSpeedButton.Create(Self);
- with FBtnTwoPage do
- begin
- Top := 28;
- Left := 8;
- Glyph.LoadFromResourceName(HInstance, 'TWO');
- GroupIndex := 1;
- OnClick := BtnClick;
- end;
- FBtnFourPage := TSpeedButton.Create(Self);
- with FBtnFourPage do
- begin
- Top := 52;
- Left := 8;
- Glyph.LoadFromResourceName(HInstance, 'FOUR');
- GroupIndex := 1;
- OnClick := BtnClick;
- end;
- FBtnOnePage.Parent := Self;
- FBtnTwoPage.Parent := Self;
- FBtnFourPage.Parent := Self;
- end
- else
- begin
- FPageImage.Left := 4;
- FBtnOnePage.Free;
- FBtnTwoPage.Free;
- FBtnFourPage.Free;
- FBtnOnePage := nil;
- FBtnTwoPage := nil;
- FBtnFourPage := nil;
- end;
- FShowButtons := AValue;
- end;
- end;
-
- procedure TGmMultipageImage.SetShowHeaderFooter(AValue: Boolean);
- begin
- FShowHeaderFooter := AValue;
- FPageImage.FShowHeaderFooter := AValue;
- FPageImage.Repaint;
- end;
-
- function TGmMultipageImage.GetShadow: TGmShadow;
- begin
- Result := FPageImage.Shadow;
- end;
-
- {procedure Register;
- begin
- RegisterComponents('GmPrintSuite', [TGmMultipageImage]);
- end;}
-
- end.
-